﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using BLLMagiPack.Managers;
using ModeloMagiPack.Entidades;

namespace MaGiPack
{
    public partial class FrmVendedor : Form
    {
        Acciones _accionActual;

        public Vendedor VendedorSeleccionado
        {
            get
            {
                Vendedor vendedor = null;

                if (dgvVendedores.SelectedRows.Count > 0)
                {
                    vendedor = new Vendedor();
                    vendedor.IdVendedor = int.Parse(dgvVendedores.SelectedRows[0].Cells["IdVendedor"].Value.ToString());

                    BLLVendedor bllVendedor = new BLLVendedor();
                    vendedor = bllVendedor.TraerVendedor(vendedor.IdVendedor);
                }

                return vendedor;
            }
        }


        public FrmVendedor()
        {
            InitializeComponent();
            _accionActual = Acciones.alta;
            SeleccionarAccion();
            txtComision.KeyPress += Utilidades.TextboxSoloNumeros_KeyPress;
            Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Utilidades.Application_ThreadException);
        }

        private void CargarGrilla() 
        {
            BLLVendedor bllVendedor = new BLLVendedor();
            dgvVendedores.DataSource = bllVendedor.TraerVendedores(txtBuscar.Text);
        }

        private void SeleccionarAccion()
        {
            if (_accionActual.CompareTo(Acciones.alta) == 0) {
                this.Text = "Nuevo Vendedor";
                //btnGuardar.Text = "Guardar nuevo";
                btnAgregar.Enabled = false;
                btnEditar.Enabled = true;
                btnRemover.Enabled = true;

                txtComision.Enabled = true;
                txtNombre.Enabled = true;
            }
            else 
            {
                this.Text = "Modificar Vendedor";
                //btnGuardar.Text = "Guardar cambios";
                btnEditar.Enabled = false;
                btnRemover.Enabled = true;
                btnAgregar.Enabled = true;

                txtComision.Enabled = true;
                txtNombre.Enabled = true;
            }
        }

        private bool ValidarDatos() {
            bool estaOK = false;

            if (txtComision.Text != "" && txtNombre.Text != "") {
                estaOK = true;                
            }
            return estaOK;
        }

        private void CargarDatosSeleccionados()
        {
            if (_accionActual == Acciones.modificacion && dgvVendedores.SelectedRows.Count > 0)
            {
                txtNombre.Text = VendedorSeleccionado.Nombre;
                txtComision.Text = VendedorSeleccionado.Comision.ToString();
            }
        }


        private void btnAgregar_Click(object sender, EventArgs e)
        {
            _accionActual = Acciones.alta;
            SeleccionarAccion();

            txtComision.Text = "";
            txtNombre.Text = "";
        }

        private void btnRemover_Click(object sender, EventArgs e)
        {
            Vendedor vendedor = VendedorSeleccionado;

            if (MessageBox.Show(string.Format("¿Eliminar vendedor {0}?", vendedor.Nombre), "Pregunta", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
            {
                BLLVendedor bllVendedor = new BLLVendedor();

                try
                {
                    bllVendedor.EliminarVendedor(vendedor);
                }
                catch (BLLMagiPackException ex)
                {
                    MessageBox.Show(ex.Message, "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
                
                CargarGrilla();
            }
        }

        private void btnEditar_Click(object sender, EventArgs e)
        {
            _accionActual = Acciones.modificacion;
            SeleccionarAccion();
            CargarDatosSeleccionados();
        }

        private void btnGuardar_Click(object sender, EventArgs e)
        {
            try
            {
                if (ValidarDatos())
                {
                    BLLVendedor bllVendedor = new BLLVendedor();
                    Vendedor vendedor = VendedorSeleccionado;

                    if (vendedor == null)
                        vendedor = new Vendedor();

                    vendedor.Comision = double.Parse(txtComision.Text);
                    vendedor.Nombre = txtNombre.Text;

                    switch (_accionActual)
                    {
                        case Acciones.alta:
                            bllVendedor.CrearVendedor(vendedor);
                            txtComision.Text = txtNombre.Text = string.Empty;
                            break;

                        case Acciones.modificacion:
                            bllVendedor.ModificarVendedor(vendedor);
                            break;

                        default:
                            break;
                    }

                    MessageBox.Show("¡Su operación se completó con éxito!", "Información", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    CargarGrilla();
                }
                else {
                    MessageBox.Show("Necesita completar los campos vacíos para poder continuar.", "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }                
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void dgvVendedores_SelectionChanged(object sender, EventArgs e)
        {
            CargarDatosSeleccionados();
            btnRemover.Enabled = btnEditar.Enabled = dgvVendedores.SelectedRows.Count > 0;
        }

        private void btnBuscar_Click(object sender, EventArgs e)
        {
            CargarGrilla();
        }

        private void FrmVendedor_Load(object sender, EventArgs e)
        {
            CargarGrilla();
        }
    }
}
